/*******************************************************************************
 Jimm - Mobile Messaging - J2ME ICQ clone
 Copyright (C) 2003-05  Jimm Project

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 ********************************************************************************
 File: src/jimm/comm/XStatus.java
 Version: ###VERSION###  Date: ###DATE###
 Author(s): aspro
 *******************************************************************************/

package jimm.comm;

import DrawControls.ImageList;
import java.io.IOException;
import javax.microedition.lcdui.Image;
import jimm.util.ResourceBundle;
import jimm.ContactList;

public class XStatus {
    
    public static final int XSTATUS_NONE = 37;
    
    private static final GUID[] xguids = {
            new GUID(new byte[] {(byte)0x01, (byte)0xD8, (byte)0xD7, (byte)0xEE, (byte)0xAC, (byte)0x3B, (byte)0x49, (byte)0x2A, (byte)0xA5, (byte)0x8D, (byte)0xD3, (byte)0xD8, (byte)0x77, (byte)0xE6, (byte)0x6B, (byte)0x92}), // ANGRY
            new GUID(new byte[] {(byte)0x5A, (byte)0x58, (byte)0x1E, (byte)0xA1, (byte)0xE5, (byte)0x80, (byte)0x43, (byte)0x0C, (byte)0xA0, (byte)0x6F, (byte)0x61, (byte)0x22, (byte)0x98, (byte)0xB7, (byte)0xE4, (byte)0xC7}), // DUCK
            new GUID(new byte[] {(byte)0x83, (byte)0xC9, (byte)0xB7, (byte)0x8E, (byte)0x77, (byte)0xE7, (byte)0x43, (byte)0x78, (byte)0xB2, (byte)0xC5, (byte)0xFB, (byte)0x6C, (byte)0xFC, (byte)0xC3, (byte)0x5B, (byte)0xEC}), // TIRED
            new GUID(new byte[] {(byte)0xE6, (byte)0x01, (byte)0xE4, (byte)0x1C, (byte)0x33, (byte)0x73, (byte)0x4B, (byte)0xD1, (byte)0xBC, (byte)0x06, (byte)0x81, (byte)0x1D, (byte)0x6C, (byte)0x32, (byte)0x3D, (byte)0x81}), // PARTY
            new GUID(new byte[] {(byte)0x8C, (byte)0x50, (byte)0xDB, (byte)0xAE, (byte)0x81, (byte)0xED, (byte)0x47, (byte)0x86, (byte)0xAC, (byte)0xCA, (byte)0x16, (byte)0xCC, (byte)0x32, (byte)0x13, (byte)0xC7, (byte)0xB7}), // BEER
            new GUID(new byte[] {(byte)0x3F, (byte)0xB0, (byte)0xBD, (byte)0x36, (byte)0xAF, (byte)0x3B, (byte)0x4A, (byte)0x60, (byte)0x9E, (byte)0xEF, (byte)0xCF, (byte)0x19, (byte)0x0F, (byte)0x6A, (byte)0x5A, (byte)0x7F}), // THINKING
            new GUID(new byte[] {(byte)0xF8, (byte)0xE8, (byte)0xD7, (byte)0xB2, (byte)0x82, (byte)0xC4, (byte)0x41, (byte)0x42, (byte)0x90, (byte)0xF8, (byte)0x10, (byte)0xC6, (byte)0xCE, (byte)0x0A, (byte)0x89, (byte)0xA6}), // EATING
            new GUID(new byte[] {(byte)0x80, (byte)0x53, (byte)0x7D, (byte)0xE2, (byte)0xA4, (byte)0x67, (byte)0x4A, (byte)0x76, (byte)0xB3, (byte)0x54, (byte)0x6D, (byte)0xFD, (byte)0x07, (byte)0x5F, (byte)0x5E, (byte)0xC6}), // TV
            new GUID(new byte[] {(byte)0xF1, (byte)0x8A, (byte)0xB5, (byte)0x2E, (byte)0xDC, (byte)0x57, (byte)0x49, (byte)0x1D, (byte)0x99, (byte)0xDC, (byte)0x64, (byte)0x44, (byte)0x50, (byte)0x24, (byte)0x57, (byte)0xAF}), // FRIENDS
            new GUID(new byte[] {(byte)0x1B, (byte)0x78, (byte)0xAE, (byte)0x31, (byte)0xFA, (byte)0x0B, (byte)0x4D, (byte)0x38, (byte)0x93, (byte)0xD1, (byte)0x99, (byte)0x7E, (byte)0xEE, (byte)0xAF, (byte)0xB2, (byte)0x18}), // COFFEE
            new GUID(new byte[] {(byte)0x61, (byte)0xBE, (byte)0xE0, (byte)0xDD, (byte)0x8B, (byte)0xDD, (byte)0x47, (byte)0x5D, (byte)0x8D, (byte)0xEE, (byte)0x5F, (byte)0x4B, (byte)0xAA, (byte)0xCF, (byte)0x19, (byte)0xA7}), // MUSIC
            new GUID(new byte[] {(byte)0x48, (byte)0x8E, (byte)0x14, (byte)0x89, (byte)0x8A, (byte)0xCA, (byte)0x4A, (byte)0x08, (byte)0x82, (byte)0xAA, (byte)0x77, (byte)0xCE, (byte)0x7A, (byte)0x16, (byte)0x52, (byte)0x08}), // BUSINESS
            new GUID(new byte[] {(byte)0x10, (byte)0x7A, (byte)0x9A, (byte)0x18, (byte)0x12, (byte)0x32, (byte)0x4D, (byte)0xA4, (byte)0xB6, (byte)0xCD, (byte)0x08, (byte)0x79, (byte)0xDB, (byte)0x78, (byte)0x0F, (byte)0x09}), // CAMERA
            new GUID(new byte[] {(byte)0x6F, (byte)0x49, (byte)0x30, (byte)0x98, (byte)0x4F, (byte)0x7C, (byte)0x4A, (byte)0xFF, (byte)0xA2, (byte)0x76, (byte)0x34, (byte)0xA0, (byte)0x3B, (byte)0xCE, (byte)0xAE, (byte)0xA7}), // FUNNY
            new GUID(new byte[] {(byte)0x12, (byte)0x92, (byte)0xE5, (byte)0x50, (byte)0x1B, (byte)0x64, (byte)0x4F, (byte)0x66, (byte)0xB2, (byte)0x06, (byte)0xB2, (byte)0x9A, (byte)0xF3, (byte)0x78, (byte)0xE4, (byte)0x8D}), // PHONE
            new GUID(new byte[] {(byte)0xD4, (byte)0xA6, (byte)0x11, (byte)0xD0, (byte)0x8F, (byte)0x01, (byte)0x4E, (byte)0xC0, (byte)0x92, (byte)0x23, (byte)0xC5, (byte)0xB6, (byte)0xBE, (byte)0xC6, (byte)0xCC, (byte)0xF0}), // GAMES
            new GUID(new byte[] {(byte)0x60, (byte)0x9D, (byte)0x52, (byte)0xF8, (byte)0xA2, (byte)0x9A, (byte)0x49, (byte)0xA6, (byte)0xB2, (byte)0xA0, (byte)0x25, (byte)0x24, (byte)0xC5, (byte)0xE9, (byte)0xD2, (byte)0x60}), // COLLEGE
            new GUID(new byte[] {(byte)0x63, (byte)0x62, (byte)0x73, (byte)0x37, (byte)0xA0, (byte)0x3F, (byte)0x49, (byte)0xFF, (byte)0x80, (byte)0xE5, (byte)0xF7, (byte)0x09, (byte)0xCD, (byte)0xE0, (byte)0xA4, (byte)0xEE}), // SHOPPING
            new GUID(new byte[] {(byte)0x1F, (byte)0x7A, (byte)0x40, (byte)0x71, (byte)0xBF, (byte)0x3B, (byte)0x4E, (byte)0x60, (byte)0xBC, (byte)0x32, (byte)0x4C, (byte)0x57, (byte)0x87, (byte)0xB0, (byte)0x4C, (byte)0xF1}), // SICK
            new GUID(new byte[] {(byte)0x78, (byte)0x5E, (byte)0x8C, (byte)0x48, (byte)0x40, (byte)0xD3, (byte)0x4C, (byte)0x65, (byte)0x88, (byte)0x6F, (byte)0x04, (byte)0xCF, (byte)0x3F, (byte)0x3F, (byte)0x43, (byte)0xDF}), // SLEEPING
            new GUID(new byte[] {(byte)0xA6, (byte)0xED, (byte)0x55, (byte)0x7E, (byte)0x6B, (byte)0xF7, (byte)0x44, (byte)0xD4, (byte)0xA5, (byte)0xD4, (byte)0xD2, (byte)0xE7, (byte)0xD9, (byte)0x5C, (byte)0xE8, (byte)0x1F}), // SURFING
            new GUID(new byte[] {(byte)0x12, (byte)0xD0, (byte)0x7E, (byte)0x3E, (byte)0xF8, (byte)0x85, (byte)0x48, (byte)0x9E, (byte)0x8E, (byte)0x97, (byte)0xA7, (byte)0x2A, (byte)0x65, (byte)0x51, (byte)0xE5, (byte)0x8D}), // INTERNET
            new GUID(new byte[] {(byte)0xBA, (byte)0x74, (byte)0xDB, (byte)0x3E, (byte)0x9E, (byte)0x24, (byte)0x43, (byte)0x4B, (byte)0x87, (byte)0xB6, (byte)0x2F, (byte)0x6B, (byte)0x8D, (byte)0xFE, (byte)0xE5, (byte)0x0F}), // ENGINEERING
            new GUID(new byte[] {(byte)0x63, (byte)0x4F, (byte)0x6B, (byte)0xD8, (byte)0xAD, (byte)0xD2, (byte)0x4A, (byte)0xA1, (byte)0xAA, (byte)0xB9, (byte)0x11, (byte)0x5B, (byte)0xC2, (byte)0x6D, (byte)0x05, (byte)0xA1}), // TYPING
            new GUID(new byte[] {(byte)0x2C, (byte)0xE0, (byte)0xE4, (byte)0xE5, (byte)0x7C, (byte)0x64, (byte)0x43, (byte)0x70, (byte)0x9C, (byte)0x3A, (byte)0x7A, (byte)0x1C, (byte)0xE8, (byte)0x78, (byte)0xA7, (byte)0xDC}), // UNK
            new GUID(new byte[] {(byte)0x10, (byte)0x11, (byte)0x17, (byte)0xC9, (byte)0xA3, (byte)0xB0, (byte)0x40, (byte)0xF9, (byte)0x81, (byte)0xAC, (byte)0x49, (byte)0xE1, (byte)0x59, (byte)0xFB, (byte)0xD5, (byte)0xD4}), // PPC
            new GUID(new byte[] {(byte)0x16, (byte)0x0C, (byte)0x60, (byte)0xBB, (byte)0xDD, (byte)0x44, (byte)0x43, (byte)0xF3, (byte)0x91, (byte)0x40, (byte)0x05, (byte)0x0F, (byte)0x00, (byte)0xE6, (byte)0xC0, (byte)0x09}), // MOBILE
            new GUID(new byte[] {(byte)0x64, (byte)0x43, (byte)0xC6, (byte)0xAF, (byte)0x22, (byte)0x60, (byte)0x45, (byte)0x17, (byte)0xB5, (byte)0x8C, (byte)0xD7, (byte)0xDF, (byte)0x8E, (byte)0x29, (byte)0x03, (byte)0x52}), // MAN
            new GUID(new byte[] {(byte)0x16, (byte)0xF5, (byte)0xB7, (byte)0x6F, (byte)0xA9, (byte)0xD2, (byte)0x40, (byte)0x35, (byte)0x8C, (byte)0xC5, (byte)0xC0, (byte)0x84, (byte)0x70, (byte)0x3C, (byte)0x98, (byte)0xFA}), // WC
            new GUID(new byte[] {(byte)0x63, (byte)0x14, (byte)0x36, (byte)0xFF, (byte)0x3F, (byte)0x8A, (byte)0x40, (byte)0xD0, (byte)0xA5, (byte)0xCB, (byte)0x7B, (byte)0x66, (byte)0xE0, (byte)0x51, (byte)0xB3, (byte)0x64}), // QUESTION
            new GUID(new byte[] {(byte)0xB7, (byte)0x08, (byte)0x67, (byte)0xF5, (byte)0x38, (byte)0x25, (byte)0x43, (byte)0x27, (byte)0xA1, (byte)0xFF, (byte)0xCF, (byte)0x4C, (byte)0xC1, (byte)0x93, (byte)0x97, (byte)0x97}), // WAY
            new GUID(new byte[] {(byte)0xDD, (byte)0xCF, (byte)0x0E, (byte)0xA9, (byte)0x71, (byte)0x95, (byte)0x40, (byte)0x48, (byte)0xA9, (byte)0xC6, (byte)0x41, (byte)0x32, (byte)0x06, (byte)0xD6, (byte)0xF2, (byte)0x80}), // HEART
            new GUID(new byte[] {(byte)0x3F, (byte)0xB0, (byte)0xBD, (byte)0x36, (byte)0xAF, (byte)0x3B, (byte)0x4A, (byte)0x60, (byte)0x9E, (byte)0xEF, (byte)0xCF, (byte)0x19, (byte)0x0F, (byte)0x6A, (byte)0x5A, (byte)0x7E}), // CIGARETTE
            new GUID(new byte[] {(byte)0xE6, (byte)0x01, (byte)0xE4, (byte)0x1C, (byte)0x33, (byte)0x73, (byte)0x4B, (byte)0xD1, (byte)0xBC, (byte)0x06, (byte)0x81, (byte)0x1D, (byte)0x6C, (byte)0x32, (byte)0x3D, (byte)0x82}), // SEX
            new GUID(new byte[] {(byte)0xD4, (byte)0xE2, (byte)0xB0, (byte)0xBA, (byte)0x33, (byte)0x4E, (byte)0x4F, (byte)0xA5, (byte)0x98, (byte)0xD0, (byte)0x11, (byte)0x7D, (byte)0xBF, (byte)0x4D, (byte)0x3C, (byte)0xC8}), // SEARCH
            // new GUID(new byte[] {(byte)0xCD, (byte)0x56, (byte)0x43, (byte)0xA2, (byte)0xC9, (byte)0x4C, (byte)0x47, (byte)0x24, (byte)0xB5, (byte)0x2C, (byte)0xDC, (byte)0x01, (byte)0x24, (byte)0xA1, (byte)0xD0, (byte)0xCD}), // LOVE
            new GUID(new byte[] {(byte)0x00, (byte)0x72, (byte)0xD9, (byte)0x08, (byte)0x4A, (byte)0xD1, (byte)0x43, (byte)0xDD, (byte)0x91, (byte)0x99, (byte)0x6F, (byte)0x02, (byte)0x69, (byte)0x66, (byte)0x02, (byte)0x6F})  // DIARY
    };

    private static final String[] xstatus = {
            "xstatus_angry",
            "xstatus_duck",
            "xstatus_tired",
            "xstatus_party",
            "xstatus_beer",
            "xstatus_thinking",
            "xstatus_eating",
            "xstatus_tv",
            "xstatus_friends",
            "xstatus_coffee",
            "xstatus_music",
            "xstatus_business",
            "xstatus_camera",
            "xstatus_funny",
            "xstatus_phone",
            "xstatus_games",
            "xstatus_college",
            "xstatus_shopping",
            "xstatus_sick",
            "xstatus_sleeping",
            "xstatus_surfing",
            "xstatus_internet",
            "xstatus_engineering",
            "xstatus_typing",
            "xstatus_unk",
            "xstatus_ppc",
            "xstatus_mobile",
            "xstatus_man",
            "xstatus_wc",
            "xstatus_question",
            "xstatus_way",
            "xstatus_heart",
            "xstatus_cigarette",
            "xstatus_sex",
            "xstatus_rambler_search",
//            "xstatus_rambler_love",
            "xstatus_rambler_journal"
    };
   
    final public static ImageList imageList = ImageList.load("/xstatus.png");
    
    private static int getXStatus(byte[] guid) {
        for (int i = 0; i < xguids.length; i++) {
            if (xguids[i].equals(guid)) {
                return i;
            }
        }
        return -1;
    }
    
    public XStatus() {
        index = -1;
    }

	public int getXStatusIndex()
	{
		return index;
	}
    
    public void setXStatus(byte[] guids) {
        index = -1;
        if (guids == null) {
            return;
        }
        
        byte guid[] = new byte[16];
        for (int i = 0; (i < guids.length) && (index == -1); i += 16) {
            System.arraycopy(guids, i, guid, 0, 16);
            index = getXStatus(guid);
        }
    }

    private int index;

    public static GUID getStatusGUID(int index) {
        if (index >= 0) {
            try {
                return xguids[index];
            } catch (Exception e) {
            }
        }
        return null;//none
    }
    
    public static Image getStatusImage(int index) {
        if (index >= 0) {
            return imageList.elementAt(index);
        }
        return null;//none
    }
/*    
    public static int getStatusIndex(int index) {
        if (index >= 0) {
            return index;
        }
        return -1;//none
    }
*/
    public static String getStatusAsString(int index) {
        if (index >= 0) {
            try {
                return ResourceBundle.getString(xstatus[index]);
            } catch (Exception e) {
            }
        }
        return ResourceBundle.getString("xstatus_none");
    }
    
    public static int getXStatusCount() {
        return xguids.length;
    }
    
    public GUID getStatusGUID() {
        return getStatusGUID(index);
    }
    
    public Image getStatusImage() {
        return getStatusImage(index);
    }
/*    
    public int getStatusIndex() {
        return getStatusIndex(index);
    }
*/
    public String getXStatusAsString() {
        return getStatusAsString(index);
    }


	int status;
    int flags;
    
    public int getNativeStatus() {
        return status;
    }
    
    public int getNativeFlags() {
        return flags;
    }

    public void setNativeStatus(int status) {
        if (status != ContactList.STATUS_OFFLINE) {
            this.status = status & 0x0000FFFF;
        } else {
            this.status = ContactList.STATUS_OFFLINE;
            this.flags = 0;
        }
    }
    
    public void setNativeFlags(int flafs) {
        if (status != ContactList.STATUS_OFFLINE) {
            this.flags = flags & 0x0000FFFF;
        } else {
            this.flags = 0;
        }
    }
}